package com.example.softwareconfigurationcoursedesign.ShopPage;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

// 数据访问对象类，用于操作产品对象和数据库交互
public class ProductDAO {
    private static final String JDBC_URL = "jdbc:mysql://localhost:3306/course_design";
    private static final String JDBC_USER = "root";
    private static final String JDBC_PASSWORD = "123456";

    // 获取产品列表的方法，根据当前页和每页显示数量返回对应的产品列表
    public List<Product> getProducts(int currentPage, int pageSize) {
        // 创建一个用于存储产品对象的列表
        List<Product> products = new ArrayList<>();
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {
            // 加载MySQL数据库驱动程序，并建立数据库连接
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);

            // 计算起始行和结束行
            int startRow = (currentPage - 1) * pageSize;
            int endRow = startRow + pageSize;

            // 使用PreparedStatement预防SQL注入，查询数据库中的产品信息
            String sql = "SELECT * FROM products LIMIT ?, ?";
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, startRow);
            stmt.setInt(2, pageSize);

            rs = stmt.executeQuery();

            // 遍历结果集，将查询到的产品信息添加到products列表中
            while (rs.next()) {
                Product product = new Product();
                product.setId(Integer.parseInt(rs.getString("id")));
                product.setPid(rs.getString("pid"));
                product.setPname(rs.getString("pname"));
                product.setPprice(Double.parseDouble(rs.getString("pprice")));
                product.setPtag(rs.getString("ptag"));
                product.setDetail(rs.getString("Product_detail"));
                product.setPurl(rs.getString("url"));
                products.add(product);
            }
        } catch (Exception e) {
            e.printStackTrace(System.err); // 打印异常信息
        } finally {
            // 关闭数据库连接、语句和结果集
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace(System.err); // 打印异常信息
            }
        }

        return products; // 返回查询到的产品列表
    }
}